
昨天教大家上字幕,今天則是反過來,給文字讓 AI 幫你配音
比起以前文字轉聲音的軟體,AI 的聲音更為自然,角色跟速度也都能調整,讓我們看看如何操作吧
文字轉語音也是劃分在 Audio Model 的部分,Spring AI 目前只支援 OpenAI
為了彈性配置,application.yml 只存放 API KEY,其他參數都放在程式碼內
@RestController
@RequiredArgsConstructor
class AiController {
	private final SpeechModel speechModel;
	@GetMapping("/tts")
    public ResponseEntity<byte[]> speech(String prompt) throws IOException {
		OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
			    .withModel("tts-1-hd")
			    .withVoice(Voice.ALLOY)
			    .withResponseFormat(AudioResponseFormat.MP3)
			    .withSpeed(1f)
			    .build();
			SpeechPrompt speechPrompt = new SpeechPrompt(prompt, speechOptions);
			SpeechResponse response = speechModel.call(speechPrompt);
        return ResponseEntity.ok()
        		.header(HttpHeaders.CONTENT_DISPOSITION, 
        				ContentDisposition
        					.attachment()
        					.filename("配音.mp3", StandardCharsets.UTF_8)
        					.build().toString())
        		.body(response.getResult().getOutput());
    }
}
SpeechModel,跟之前模組不一樣的是這個模組回傳的是 byte[],要做一些處理才能下載檔案,所以回傳值特別使用 ResponseEntity<byte[]>,昨天的結果是 String,若不下載也能直接顯示在網頁上.withModel("tts-1")  TTS 的模型,可以選 tts-1 以及 tts-1-hd(取樣頻率較高).withVoice(Voice.ALLOY) 選擇要哪種角色的聲音,有以下六種可選@JsonProperty("alloy") ALLOY("alloy"),
@JsonProperty("echo") ECHO("echo"),
@JsonProperty("fable") FABLE("fable"),
@JsonProperty("onyx") ONYX("onyx"),
@JsonProperty("nova") NOVA("nova"),
@JsonProperty("shimmer") SHIMMER("shimmer");
.withResponseFormat(AudioResponseFormat.MP3) 輸出聲音的格式,雖然後面存檔會自訂附檔名,不過格式得匹配,不然程式會無法辨認@JsonProperty("mp3") MP3("mp3"),
@JsonProperty("opus") OPUS("opus"),
@JsonProperty("aac") AAC("aac"),
@JsonProperty("flac") FLAC("flac");
.withSpeed(1.0f) 講話的速度,雖然影音編輯軟體可以調整速度,不過透過 AI 來調整聲調才不會變太多,範圍介於 0.25 ~ 4HttpHeaders.CONTENT_DISPOSITION 指定經過測試,雖然偶有錯誤發生,不過聲音聽起來非常自然,可以跟手機版 ChatGPT 對話就知道效果,雖然有點 ABC 腔調,不過整體來說還蠻好聽的
到目前為止凱文大叔把基本 Model 的操作都介紹過,不過 AI 的變化非常快,搞不好幾個月後又有新的 Model,大家覺得前面介紹這些 Model 可以取代掉那些職業?
程式碼下載:
https://github.com/kevintsai1202/SpringBoot-AI-Day10.git
凱文大叔使用 Java 開發程式超過 20 年,對於 Java 生態非常熟悉,曾使用反射機制開發 ETL 框架,對 Spring 背後的原理非常清楚,目前以 Spring Boot 作為後端開發框架,前端使用 React 搭配 Ant Design
下班之餘在 Amazing Talker 擔任程式語言講師,並獲得學員的一致好評
最近剛成立一個粉絲專頁-凱文大叔教你寫程式 歡迎大家多追蹤,我會不定期分享實用的知識以及程式開發技巧
想討論 Spring 的 Java 開發人員可以加入 FB 討論區 Spring Boot Developer Taiwan
我是凱文大叔,歡迎一起加入學習程式的行列